home *** CD-ROM | disk | FTP | other *** search
-
- Listing 10: Function Pwhile::parse()
-
- _CLASSDEF(Pwhile)
- class _CLASSTYPE Pwhile
- {
- public:
- Pwhile(){}
- ~Pwhile(){}
- BOOL parse();
- int write(int,const char *);
- }
-
- BOOL Pwhile::parse()
- {
- int nEndofWhile;
- Token * pTemp;
-
- // create an expression object
- Pexpression * pTempExpression = new Pexpression;
- // call function parse and clean up
- PARSEU(pTempExpression)
- pTemp = gpTokenizer->getToken(); // get a new token
-
- if (pTemp->tokentype == tkdo) // check for token DO
- {
- pTemp = gpTokenizer->peekToken(); // a look ahead token
-
- // a loop to parse statements inside the while loop
- while ((pTemp->tokentype != tkendwhile) &&
- (!gpTokenizer->eof()) )
- {
- // create a statement object
- Pstatement * pMyStatement = new Pstatement;
- PARSEU(pMyStatement) // call function parse and clean up
-
- pTemp = gpTokenizer->peekToken();
- }
-
- if (pTemp->tokentype == tkendwhile)
- {
- // update the branch pointer
- gpLocalSymTable->Put(nEndofWhile,
- new Sym_Number((NUMBER) gnCslFileIndex));
- gpTokenizer->getToken();
- }
- else
- {
- gpErrorFile->raise(39);
- return FALSE;
- }
- }
- else
- {
- gpErrorFile->raise(10);
- return FALSE;
- }
-
- return TRUE;
- }
-